

// ?: 匹配不捕获 + 至少一个  ?尽可能少匹配
const defaultReg = /\{\{((?:.|\r?\n)+?)\}\}/g
export const util = {
  compilerText(node, vm){ // 编译文本 替换{{}}
    if (!node.oldContent) {
      node.oldContent = node.textContent
    }
    node.textContent = node.oldContent.replace(defaultReg, function(...args){
      
      return JSON.stringify(util.getValue(vm, args[1]));
    })
  },

  getValue(vm, expr){ // 取 school.name.a 
    let keys = expr.split('.');
    return keys.reduce((memo, current) => {
      memo = memo[current];
      return memo;
    }, vm);
  },
}

// node 就是fragment
export function complier(node, vm){
  let childNodes = node.childNodes;
  // 将类数组转化为数组
  [...childNodes].forEach(child => { // 一种是元素、一种是文本
    if (child.nodeType === 1) { // 1元素  3 文本
      // 递归进行编译
      complier(child, vm);
    }else if (child.nodeType === 3) {
      util.compilerText(child, vm)
    }
  });
}